001 /* 002 * Copyright 2005 Stephen J. McConnell. 003 * 004 * Licensed under the Apache License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.apache.org/licenses/LICENSE-2.0 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 013 * implied. 014 * 015 * See the License for the specific language governing permissions and 016 * limitations under the License. 017 */ 018 019 package net.dpml.transit.info; 020 021 import java.util.Arrays; 022 023 import net.dpml.lang.AbstractDirective; 024 025 /** 026 * Description of the Transit cache configuration. 027 * 028 * @author <a href="http://www.dpml.net">Digital Product Meta Library</a> 029 * @version 1.0.2 030 */ 031 public class CacheDirective extends AbstractDirective 032 { 033 /** 034 * Default cache path. 035 */ 036 public static final String CACHE_PATH = "${dpml.data}/cache"; 037 038 /** 039 * Default system local repository path. 040 */ 041 public static final String LOCAL_PATH = "file:${dpml.system}/local"; 042 043 /** 044 * Default layout strategy key. 045 */ 046 public static final String CACHE_LAYOUT = "classic"; 047 048 /** 049 * Default layout strategy key. 050 */ 051 public static final String LOCAL_LAYOUT = "modern"; 052 053 /** 054 * Empty layout array. 055 */ 056 public static final LayoutDirective[] EMPTY_LAYOUTS = new LayoutDirective[0]; 057 058 /** 059 * Empty resource host array. 060 */ 061 public static final HostDirective[] EMPTY_HOSTS = new HostDirective[0]; 062 063 private final String m_cache; 064 private final String m_cacheLayout; 065 private final String m_local; 066 private final String m_localLayout; 067 private final LayoutDirective[] m_layouts; 068 private final HostDirective[] m_hosts; 069 070 /** 071 * Create a new CacheDirective. 072 */ 073 public CacheDirective() 074 { 075 this( 076 CACHE_PATH, CACHE_LAYOUT, LOCAL_PATH, LOCAL_LAYOUT, EMPTY_LAYOUTS, EMPTY_HOSTS ); 077 } 078 079 /** 080 * Create a new CacheDirective. 081 * @param cache the cache directory path 082 * @param cacheLayout the cache layout strategy 083 * @param local the local repository path 084 * @param localLayout the local repository layout strategy 085 * @param layouts an array of extended layout descriptors 086 * @param hosts an array of supplimentary host descriptors 087 * @exception NullPointerException if the cache, local, or layout argument is null 088 */ 089 public CacheDirective( 090 String cache, String cacheLayout, String local, String localLayout, 091 LayoutDirective[] layouts, HostDirective[] hosts ) 092 throws NullPointerException 093 { 094 if( null == cache ) 095 { 096 throw new NullPointerException( "cache" ); 097 } 098 if( null == cacheLayout ) 099 { 100 throw new NullPointerException( "cacheLayout" ); 101 } 102 if( null == local ) 103 { 104 throw new NullPointerException( "local" ); 105 } 106 if( null == localLayout ) 107 { 108 throw new NullPointerException( "localLayout" ); 109 } 110 111 m_cache = cache; 112 m_cacheLayout = cacheLayout; 113 m_local = local; 114 m_localLayout = localLayout; 115 116 if( null == layouts ) 117 { 118 m_layouts = new LayoutDirective[0]; 119 } 120 else 121 { 122 m_layouts = layouts; 123 } 124 125 if( null == hosts ) 126 { 127 m_hosts = new HostDirective[0]; 128 } 129 else 130 { 131 m_hosts = hosts; 132 } 133 } 134 135 /** 136 * Return the cache path. 137 * 138 * @return the cache path 139 */ 140 public String getCache() 141 { 142 return m_cache; 143 } 144 145 /** 146 * Return the cache layout id. 147 * 148 * @return the cache layout identifier 149 */ 150 public String getCacheLayout() 151 { 152 return m_cacheLayout; 153 } 154 155 /** 156 * Return the local repository path. 157 * 158 * @return the local repository path 159 */ 160 public String getLocal() 161 { 162 return m_local; 163 } 164 165 /** 166 * Return the local system repository layout id. 167 * 168 * @return the system layout identifier 169 */ 170 public String getLocalLayout() 171 { 172 return m_localLayout; 173 } 174 175 /** 176 * Return the supplimentary layout plugin configurations. 177 * 178 * @return the layout directives 179 */ 180 public LayoutDirective[] getLayoutDirectives() 181 { 182 return m_layouts; 183 } 184 185 /** 186 * Return the supplimentary layout plugin configurations. 187 * 188 * @return the host directives 189 */ 190 public HostDirective[] getHostDirectives() 191 { 192 return m_hosts; 193 } 194 195 /** 196 * Test if the supplied object is equal to this object. 197 * @param other the object to evaluate 198 * @return true if this object is equal to the supplied object 199 */ 200 public boolean equals( Object other ) 201 { 202 if( super.equals( other ) && ( other instanceof CacheDirective ) ) 203 { 204 CacheDirective directive = (CacheDirective) other; 205 if( !equals( m_cache, directive.m_cache ) ) 206 { 207 return false; 208 } 209 else if( !equals( m_cacheLayout, directive.m_cacheLayout ) ) 210 { 211 return false; 212 } 213 else if( !equals( m_local, directive.m_local ) ) 214 { 215 return false; 216 } 217 else if( !equals( m_localLayout, directive.m_localLayout ) ) 218 { 219 return false; 220 } 221 else if( !Arrays.equals( m_layouts, directive.m_layouts ) ) 222 { 223 return false; 224 } 225 else 226 { 227 return Arrays.equals( m_hosts, directive.m_hosts ); 228 } 229 } 230 else 231 { 232 return false; 233 } 234 } 235 236 /** 237 * Compute the instance hashcode value. 238 * @return the hashcode 239 */ 240 public int hashCode() 241 { 242 int hash = super.hashCode(); 243 hash ^= hashValue( m_cache ); 244 hash ^= hashValue( m_cacheLayout ); 245 hash ^= hashValue( m_local ); 246 hash ^= hashValue( m_localLayout ); 247 hash ^= hashArray( m_layouts ); 248 hash ^= hashArray( m_hosts ); 249 return hash; 250 } 251 }